/**
 * 问题:
 * 调用repeat(console.log, 5, 1000) 实现 间隔1s重复打印5次
 * 
 * 描述: 
 * 如下调用repeatLog('abc'), 控制台间隔1s打印5次abc
 * const repeatLog = repeat(console.log, 5, 1000);
 * repeatLog('abc')
*/

/**
 * @param  {Function} callback 要执行的回调
 * @param  {Number} count 执行次数
 * @param  {Number} duration 执行间隔时间
 * @return {Function} 返回一个新的打印函数
*/
function repeat(callback, count, duration) {
  return (...args) => {
    // 定义异步函数
    const asyncFunc = () => {
      return new Promise((resolve) => {
        setTimeout(() => {
          callback(...args)
          resolve()
        },duration)
      })
    }
    
    // 执行串：Promise.resolve().then(()=>a()).then(()=>b())
    Array(count).fill(asyncFunc).reduce((prom, next) => prom.then(next), Promise.resolve())
  }
}

// // 测试
// const repeatLog = repeat(console.log, 5, 1000)
// repeatLog('121221')
// // '121221'
// // '121221'
// // '121221'
// // '121221'
// // '121221'
